其實電腦裡不只有CPU,還有controller,而controller會幫忙做一些搬移的動作,所以這個CPU只需下指令給controller,讓controller進行搬移的動作,因為這個指令是interrupt,所以下完指令之後,controller就開始搬,在搬的過程中CPU不用進行任何監控,等controller全部搬完之後,再去通知CPU,然後CPU可以直接去access,所以device會signal一個interrupt,之後就會打斷CPU,讓CPU直接去access。
Program A因為要做I/O,例如:printf,在printf之後,它會在那邊等待output或input執行完畢,才能執行下一個instruction,所以program A issue完I/O之後,其實它是停留在那邊的,那CPU要做什麼?CPU就可以切換到另一個program B,當interrupt進來的時候,CPU就知道原先的program A I/O執行完了,這時候CPU就會中斷執行中的program B,回到program A,之後要執行program A還是program B,就要看CPU的scheduling決定了。
這邊interrupt有一個handler的動作,要去make sure剛剛I/O的動作做完,把program A重新啟動或把它的status改成可以被執行的狀態。
通常OS的設計是會在interrupt handler結束後,繼續執行program B,或者program A是一個比較重要的程式,I/O終於完成了,它的priority比較高,那program A就立刻開始執行。